import request from '@/api/axios'
import {AxiosPromise} from 'axios'
import {DataRes} from '@/api/config'
import {BasePhysicalExamination} from './index'
import {UploadUserFile} from 'element-plus/es'

export interface ItemList extends BasePhysicalExamination {
  registerItemGroupId?: string // 已登记的项目组合id
  registerItemGroupName?: string // 已登记的项目组合名称
  itemGroupId: string // 项目组合id
  itemGroupCode: string // 项目组合编码
  itemGroupName: string // 项目组合名称
  itemName?: string // 项目名称
  itemCode?: string // 项目编码
  itemId?: string // 项目id
  id?: string // 项目报告id
  result?: string | number | null // 结果
  precision?: string // 精度
  sort?: number // 用于排序
  reportTime?: string | null // 结果日期
}

export interface CheckReportFileList extends UploadUserFile {
  checkupRegisterId?: string // 体检登记表id
  itemGroupId?: string // 项目组合id
  fileUrl?: string // 文件地址
  base64?: string // 用来回显
  fileSize?: string // 文件大小
  fileName?: string // 文件名称
  id?: string // id
}

export interface CheckUpFormData {
  inspectionDescription?: string // 检查描述
  inspectionConclusionRadio?: boolean // 检查结论单选
  inspectionConclusion?: string // 检查结论
  fileList?: Array<CheckReportFileList> // 影像附件
}

export interface CheckReportItemGroup {
  registerItemGroupId: string // 用于右侧项目信息查询的id
  checkupStatus?: number // 体检状态
  itemGroupId: string // 项目组合名称
  itemGroupName: string // 项目组合名称
  itemGroupCode: string // 项目组合编码
  description?: string | null // 检查描述
  isNormal?: number // 检查结论是否异常
  result?: string | number | null // 检查结论
  itemName: string // 项目名称
  itemCode: string // 项目编码
  itemId: string // 项目id
  id?: string // 项目报告id
  sort?: number // 用于排序
  itemList: Array<ItemList> // 检验项目
  imageList?: Array<CheckReportFileList>
  fileList?: Array<CheckReportFileList>
  formData?: CheckUpFormData
  dutyDoctorName?: string // 体检医生
  dutyDoctorId?: string // 体检医生id
}

export interface ItemGroupRequired {
  isRequired: boolean // 是否必填
}

/**
 * @description:
 * @param {object} params checkupRegisterId 体检登记表id checkType 检验类型  2-检验  3-检查
 * @return {*}
 */
export const getItemGroup = (params: {checkupRegisterId: string; checkType: number}): AxiosPromise<DataRes<Array<CheckReportItemGroup>>> => {
  return request({
    url: '/api/checkReport/getItemGroup',
    method: 'get',
    params
  })
}

/**
 * @description: 查询项目组合是否必填
 * @param {object} params
 * @return {*}
 */
export const getItemGroupRequired = (params: {itemGroupIds: string}): AxiosPromise<DataRes<Array<ItemGroupRequired>>> => {
  return request({
    url: '/api/checkReport/getRequired',
    method: 'get',
    params
  })
}

/**
 * @description: 根据项目组合数据获取检验项目数据
 * @param {object} params checkupRegisterId 体检登记表id checkType 检验类型  2-检验  3-检查  itemGroupId  项目组合id
 * @return {*}
 */
export const getItemDetails = (params: {checkupRegisterId: string; checkType: number; itemGroupId: string}): AxiosPromise<DataRes<Array<CheckReportItemGroup>>> => {
  return request({
    url: '/api/checkReport/getItemInfo',
    method: 'get',
    params
  })
}

/**
 * @description: 根据项目组合数据获取检查项目数据
 * @param {object} params checkupRegisterId 体检登记表id checkType 检验类型  2-检验  3-检查  itemGroupId  项目组合id
 * @return {*}
 */
export const getCheckInfo = (params: {checkupRegisterId: string; checkType: number; itemGroupId: string}): AxiosPromise<DataRes<CheckReportItemGroup>> => {
  return request({
    url: '/api/checkReport/getCheckInfo',
    method: 'get',
    params
  })
}

/**
 * @description: 保存检查报告
 * @param {ItemList} data
 * @return {*}
 */
export const saveCheckReport = (data: Array<Partial<ItemList & CheckReportItemGroup>>): AxiosPromise<DataRes<undefined>> => {
  return request({
    url: '/api/checkReport/save',
    method: 'post',
    data
  })
}

/**
 * @description: 保存检验报告文件信息
 * @param {Array} data
 * @return {*}
 */
export const saveCheckReportFile = (data: Array<CheckReportFileList>): AxiosPromise<DataRes<undefined>> => {
  return request({
    url: '/api/checkReportImage/save',
    method: 'post',
    data
  })
}

/**
 * @description: 拒检检查报告
 * @param {BasePhysicalExamination} data
 * @return {*}
 */
export const rejectCheckReport = (data: Array<BasePhysicalExamination>): AxiosPromise<DataRes<undefined>> => {
  return request({
    url: '/api/checkReport/reject',
    method: 'post',
    data
  })
}
